/**
 * Copyright (c)  2018 All Rights Reserved.
 */
package com.skyable.device.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.skyable.common.common.ServiceResult;
import com.skyable.device.entity.ProductInfo;

import java.util.List;

/**
 * @author GaoYuan
 * @date 2019/11/4 15:19
 * @desc 产品服务接口
 *
 */
public interface IProductInfoService extends IService<ProductInfo> {

    /**
     * 根据id取得product_info对象
     *
     * @param productInfoId
     * @return
     */
    ServiceResult<ProductInfo> getProductInfoById(String productInfoId);

    /**
     * 保存product_info对象
     *
     * @param productInfo
     * @return
     */
    ServiceResult<ProductInfo> createProductInfo(ProductInfo productInfo);

    /**
     * 更新product_info对象
     *
     * @param productInfo
     * @return
     */
    ServiceResult<Integer> updateProductInfo(ProductInfo productInfo);

    /**
     * 查询产品列表
     * @param productInfo
     * @param page
     * @param limit
     * @return
     */
    ServiceResult<IPage<ProductInfo>> getProductList(ProductInfo productInfo, Integer page, Integer limit);

    /**
     * 查询产品列表
     * @param productInfo
     * @return
     */
    ServiceResult<List<ProductInfo>> getProductList(ProductInfo productInfo);

    /**
     * 查询主域下的产品数量
     * @param domainId
     * @return
     */
    ServiceResult<Integer> getDomainProductCount(Long domainId);

    /**
    * 更新服务信息表及配置http服务器
    * @param  productInfo
    * @return
    */
    ServiceResult<Integer> updateProductInfoAndApi(ProductInfo productInfo, String serviceIp, Integer servicePort);

    /**
     * 获取转发地址
     * @param subDomainId
     * @return
     */
    ServiceResult<Long> getRedirectInfo(Long subDomainId);

    /**
     * 设置UDS数据转发地址（转发至平台）
     * @param domainId
     * @param subDomainId
     * @return
     */
    String setPlatformDataReportServer(Long domainId, Long subDomainId);

    /**
     * 设置UDS状态转发地址（转发至平台）
     * @param domainId
     * @param subDomainId
     * @return
     */
    String setPlatformStatusReportServer(Long domainId, Long subDomainId);


    /**
     * 根据serviceId查询所有产品信息
     *
     * @param serviceId
     * @return
     */
    ServiceResult<List<ProductInfo>> getProductListByServiceId(Long serviceId);
}
